package com.foreknow.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 动态代理的核心处理类
 */
public class ProxyHandle implements InvocationHandler {
  //目标对象
  Object target;

  public void setTarget(Object target) {
    this.target = target;
  }

  DogInterceptor di = new DogInterceptor();
  /**
   * @param proxy 代理的真实对象
   * @param method 指的是我们所要调用真实对象的某个方法的Method对象
   * @param args 指的是调用真实对象某个方法的时候接收的参数
   * @return
   * @throws Throwable
   */
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    if(method.getName().equals("info")){
      di.method1();
      //获取目标对象的方法(切入点，我们要在切入点之前或之后做一些操作)
      method.invoke(target,args);
      di.method2();
    }else {
      method.invoke(target,args);
    }
    return null;
  }
}
